package org.smile.validate;

import java.util.Locale;

import org.smile.beans.BeanProperties;
import org.smile.validate.handler.DateTimeValidator;
import org.smile.validate.handler.DateValidator;
import org.smile.validate.handler.EmailValidator;
import org.smile.validate.handler.EqualToValidator;
import org.smile.validate.handler.LengthRangeValidator;
import org.smile.validate.handler.MaxLengthValidator;
import org.smile.validate.handler.MinLengthValidator;
import org.smile.validate.handler.NotEqualValidator;
import org.smile.validate.handler.NumberValidator;
import org.smile.validate.handler.ExpressionValidator;
import org.smile.validate.handler.RangeValidator;
import org.smile.validate.handler.RegExpValidator;
import org.smile.validate.handler.RequiredValidator;
import org.smile.validate.handler.TelephoneValidator;
import org.smile.validate.handler.Validator;

/**
 * 数据校验类型
 * 
 * @author 胡真山
 * @Date 2016年2月3日
 */
public enum ValidateType {
	/**
	 * 非空判断
	 */
	required(new RequiredValidator()),
	/**
	 * 数字区间
	 */
	range(new RangeValidator()),
	/**
	 * 长度区间
	 */
	lengthRange(new LengthRangeValidator()),
	/**
	 * 最大长度限制
	 */
	maxLength(new MaxLengthValidator()),
	/**
	 * 最小长度限制
	 */
	minLength(new MinLengthValidator()),
	/**
	 * 一样
	 */
	equalTo(new EqualToValidator()),
	/**
	 * 不一样
	 */
	notEqual(new NotEqualValidator()),
	/**
	 * 数字类型
	 */
	number(new NumberValidator()),
	/**
	 * 日期格式
	 */
	date(new DateValidator()),
	/**
	 * 日期日时格式
	 */
	datetime(new DateTimeValidator()),
	/**
	 * 时间类型
	 */
	time(new DateTimeValidator()),
	/** 电话号码 */
	telephone(new TelephoneValidator()),
	/** 电子邮箱地址 */
	email(new EmailValidator()),
	/** 正则表达式匹配 */
	regexp(new RegExpValidator()),
	/**smile表达式*/
	expression(new ExpressionValidator()),
	/**没有难的类型*/
	none(null);

	private Validator validater;

	private ValidateType(Validator validater) {
		this.validater = validater;
	}

	public boolean validate(Rule f, ValidateSupport action, BeanProperties properties) throws Exception {
		return validater.validate(f, action, properties);
	}
	
	public Validator getValidater(){
		return validater;
	}
	/**
	 * 国际化提示文本
	 * @param locale
	 * @return
	 */
	public String getText(Locale locale) {
		return ValidateMessages.message.getString(locale, ValidateConstants.validateTextPrefix + toString());
	}
}
